iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 9
0
Modern Web

VUE & PHP (Apache2) & Docker 實戰開發系列 第 9

Day9 - PHP-Laravel 建立假資料功能

  • 分享至 

  • xImage
  •  

今天來講講Laravel裡的一些小功能吧!
這篇主要是我當初在練習時因為需要資料庫裡的資料,
又不可能一下子想出這麼資料來提供我練習用,
於是強大的Laravel也能夠幫助我們面對這個窘境。

這次就用專案的例子來實作給大家看,
確定.env連接到資料庫後,進入專案資料夾後,終端機輸入

php artisan make:model House -m

上方這串指令來跟大家說明一下,這裡我們會得到兩個.php檔案,
都是我們等等會用到的,分別是ModelTable
下面是各別名稱及位置

Model:/app/house.php

Table:/database/migrations/create_houses_table.php

確定這些檔案都在所屬的資料夾裡後我們先從Table開始,
設想一下Table裡需要什麼欄位,下方為Table原檔畫面

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateHousesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('houses', function (Blueprint $table) {
            $table->increments('id');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('houses');
    }
}
  • 首先看到up()down()兩個function,這是分別用來幫Tablemigrat和rollback的。
  • $table->increments('id'); 代表資料成功建立時自動增加id編號。
  • $table->timestamps(); migrate後會看到多了兩個欄位created_atupdated_at,這和上述的id一樣都是預設好了,我們不用去做更改。
  • Schema::dropIfExists('houses'); 看字面意思就知道如果有houses的存在就把它drop。

我們就把欄位給加在up()的function裡變成下方畫面

public function up()
    {
        Schema::create('houses', function (Blueprint $table) {
            $table->increments('id');
            $table->string('city');                //城市
            $table->string('district');            //區域
            $table->string('kind');                //房型
            $table->string('area');                //坪數
            $table->integer('pattern');            //房間數 
            $table->integer('price');              //租金
            $table->timestamps();
        });
    }

輸入完存檔,終端機輸入

php artisan migrate

之後到Model裡加入$fillable功能,確保我們欄位的值都能被添加數值進去。

class House extends Model
{
    protected $fillable = ['city', 'district', 'kind', 'area', 'pattern', 'price'];
}

接著就輪到本篇主角登場了seeder
這功能就是能在我們的資料庫裡去建立多筆假資料,終端機輸入

php artisan make:seeder HousesTableSeeder

檔案位於

seeder:/database/seeds/HousesTableSeeder.php

在run()的function裡加入假資料的語法

<?php

use Illuminate\Database\Seeder;

class HousesTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        
        // 讓`seeder`知道我們要用\Faker\Factory::create()的function
        House::truncate();

        $faker = \Faker\Factory::create();

        // 開始建立欄位所需要的假資料參數到資料庫裡
        for ($i = 0; $i < 50; $i++) {
            House::create([
                'city' => $faker->city,
                'district' => $faker->streetName,
                'kind' => $faker->cityPrefix,
                'area' => $faker->numberBetween($min = 10, $max = 50),
                'pattern' => $faker->numberBetween($min = 1, $max = 5),
                'price' => $faker->numberBetween($min = 10000, $max = 50000),
            ]);
    }
}

這裡還有個前置作業是為了之後的方便一次就創建所有Table需要的假資料,
我們先到/database/seeds/DatabaseSeeder.php

<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        $this->call(HousesTableSeeder::class);   
    }
}

語法打完後,終端機輸入

php artisan db:seed

這樣用seeder創的假資料就在你的資料庫裡了,
本篇介紹到此,下次見~


上一篇
Day8 - Vue 專案啟動 Routing & Material
下一篇
Day10 - PHP-開始建立API
系列文
VUE & PHP (Apache2) & Docker 實戰開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
qian1208
iT邦新手 5 級 ‧ 2019-01-15 15:16:09

您好,我依照範例的過程中發現在這段會找不到 House,我想應該是沒有用 use 引入的關係。
https://ithelp.ithome.com.tw/upload/images/20190115/20113425ZfQdO8yYw7.png

於是我自行加入了這段,但仍然無效,請問問題可能是出在哪呢?
use Illuminate\App\House;

czw745 iT邦新手 5 級 ‧ 2019-01-15 18:26:46 檢舉

看來是漏掉了,一定要加
use App\House;
這樣Laravel才會知道是要使用哪個table,試試看。

那是使用model的路徑,如果加了Illuminate程式會以為是在這個Illuminate資料夾裡的App的House.php,但實際上並無名為Illuminate資料夾的存在。

我要留言

立即登入留言